/*
 * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package sun.reflect.generics.visitor;

import sun.reflect.generics.tree.*;

/**
 * Visit a TypeTree and produce a result of type T.
 */
public interface TypeTreeVisitor<T> {

    /**
     * Returns the result of the visit.
     *
     * @return the result of the visit
     */
    T getResult();

    // Visitor methods, per node type

    void visitFormalTypeParameter(FormalTypeParameter ftp);

    void visitClassTypeSignature(ClassTypeSignature ct);

    void visitArrayTypeSignature(ArrayTypeSignature a);

    void visitTypeVariableSignature(TypeVariableSignature tv);

    void visitWildcard(Wildcard w);

    void visitSimpleClassTypeSignature(SimpleClassTypeSignature sct);

    void visitBottomSignature(BottomSignature b);

    //  Primitives and Void
    void visitByteSignature(ByteSignature b);

    void visitBooleanSignature(BooleanSignature b);

    void visitShortSignature(ShortSignature s);

    void visitCharSignature(CharSignature c);

    void visitIntSignature(IntSignature i);

    void visitLongSignature(LongSignature l);

    void visitFloatSignature(FloatSignature f);

    void visitDoubleSignature(DoubleSignature d);

    void visitVoidDescriptor(VoidDescriptor v);
}
